約 3,098,046 件
https://w.atwiki.jp/angel-yuzzo/pages/90.html
wikiの使い方講座 wikiの使い方その他の解説です。最初に読んでくださいな。 1.ユーザー登録の方法 →必読!登録手順をよく読んで、メンバー登録をしてください。 流れは 「メンバー登録・Fメ」→「自動返信メール」→「管理者側が承認」です。 面倒な手順ですが、荒らし対策です。よろしくお願いします(*´∀`*) *Fメの送り方 ALO画面下部のフレンド(Alt+Fでも可)ウィンドウを開き、下部タブの「Fメール」をクリック。メール作成ボタンを押して、宛先に「つづら」と入力すればおkです。 2.ログインする 1が終了し、登録したメールアドレスに承認通知が届いたら、ログイン可能です。 承認通知が届くまでは編集などは出来ません。 画面右上の「ログイン」をクリックし、1で登録したIDとパスワードを入力してください。 3.編集する 基本はワープロモードになっていますので、通常のワープロソフト(ワードなど)と同じ操作で書き込みや編集が出来ます。よくわからない場合や、詳しく知りたい場合はこちらへ→@wiki初心者ガイド 一部ページ(トップやメニュー)は「アットウィキモード」で作成されています。ヘルプを参照するか、編集ページ下部に簡単な説明(テキスト整形ルール)があるのでそこを読めば問題ないと思います。 どうにもわからん!と言う方はここに書き込んでくださいな→掲示板へ*作成のヒント→ページ作成の小ネタ集(質問を受けたものをまとめてます) 4-1.新規ページを作る 画面左上、「@wikiメニュー」の「新規ページ作成」をクリック。 作成したいページ名を入力後、編集モードを選び、新規ページ作成ボタンを押せばおkです。 編集モードについてですが、基本的にデフォルトのままでお願いします。 下手に変えると、他の人が後日編集するのに支障が出る可能性があります。 またメニューの使い方ですが、通常メニュー欄(トップページ・掲示板などがある部分)は「ギルド内外に向けての項目」、メンバー専用欄は「ギルド内に向けての項目」とわかれています。通常メニュー欄は閲覧制限をかけませんが、メンバー専用欄には管理者が気がつき次第閲覧制限をかけていきますので要注意です。 4-2.個人ページを作る 個人ページを作成する場合は、編集モードは各個人の好みで判断してください。 ギルドwikiスペースにおいて著しく不適切なものでなければ問題ないです。 ただし一人で複数の個人ページを作る場合は、メニューに複数の項目を登録するのではなくメニュー欄には「個人複数ページのメニュー」を置き、「個人複数ページのメニュー」内からそれぞれのページへの分岐を行ってください。 <例:メンバーAがA1、A2、A3の個人ページを作成した場合> 「メニュー欄:A総合メニュー」→「A総合メニューページ:A1、A2、A3へのリンク」→「それぞれのページ」という分岐になります。 メニュー欄が無駄に長く、複雑にならないための対策ですのでご理解くださいな。 (上記ルールが守られていない場合は、勝手に管理側で整理することもあるかもしれません) またコメントやメールフォーム、別途掲示板の作成も自由です。 4-3.左メニューに登録する 左メニューへの登録は、左メニュー一番下の「ここを編集する」からできます。 メニューページはワープロモードではなく、アットウィキモードでの編集になりますので、若干注意が必要です。 -[[(個人ページ名]](-[[]]は半角)と記入してください。 他の項目をコピペしてもらうのが楽です。 以上で基本的な@wikiの使用方法は終了です。 以降は掲示板利用についてです。 5.掲示板にメンバー登録をする このwikiの左側メニュー3番目、「掲示板」をクリック。 トップページ上部タブの一番左、「Register」をクリック。 表示されたページの下部、「規約に同意する」をクリック。 登録情報を入力し(ユーザー情報は任意。いれなくてもおkです)、送信を押してください。 メンバー登録をしなくても「雑談・交流」掲示板は使用可能ですが、メンバー専用掲示板は閲覧不可になってしまいます。そのため、必ずメンバー登録を済ませてください。 登録後、管理者側で「ユッゾギルドメンバーグループ」に参加承認をすることでメンバー専用掲示板が使用可能になります。 6.掲示板を利用する 詳しくはこちらへ→掲示板の使い方
https://w.atwiki.jp/desirae/pages/14.html
使用方法
https://w.atwiki.jp/amaeda/pages/33.html
/** * @brief test of fftw r2c transform * @author maeda * @date 2008/09/24 */ #include cv.h #include cxcore.h #include highgui.h #include "fftw3.h" #include "powerspectol.h" #pragma comment( lib, "cv.lib" ) #pragma comment( lib, "cxcore.lib" ) #pragma comment( lib, "highgui.lib" ) #pragma comment( lib, "fftw3.lib" ) int main( void ) { IplImage *img = NULL; IplImage *imgman = NULL; IplImage *show = NULL; IplImage *spectol = NULL; CvSize size; fftw_complex *out = NULL; fftw_plan plan = NULL; int width,height; int i,j; // (1) load image (unsigned char) img = cvLoadImage( "lena.bmp", CV_LOAD_IMAGE_GRAYSCALE ); if( !img ){ printf("no image.\n"); return false; } width = img- width; height = img- height; size = cvSize( width/2+1, height ); out = (fftw_complex*)fftw_malloc( sizeof(fftw_complex) * (width/2 + 1) * height ); spectol = cvCreateImage( size, IPL_DEPTH_64F, 1 ); show = cvCreateImage( size, IPL_DEPTH_8U, 1 ); imgman = cvCreateImage( cvSize( width, height ), IPL_DEPTH_64F, 1 ); if( !imgman || !out || !spectol || !show ){ printf("failed to allocate memory.\n"); return false; } // (2) convert image (unsigned char- double) cvScale( img, imgman ); plan = fftw_plan_dft_r2c_2d( height, width, (double*)imgman- imageData, out, FFTW_ESTIMATE ); if( !plan ){ printf("failed to create plan\n"); return false; } // (3) fft (double- fftw_complex) fftw_execute(plan); // (4) get powerspectol (fftw_complex- double) maGetPowerSpectol2D( out, (double*)spectol- imageData, width/2+1, height ); // (5) convert image (double- unsigned char) cvScale( spectol, show, 255 ); // (6) show result cvNamedWindow( "window" ); cvShowImage( "window", show ); cvWaitKey(0); cvDestroyWindow( "window" ); if( out ) fftw_free( out ); if( img ) cvReleaseImage( img ); if( imgman ) cvReleaseImage( imgman ); if( show ) cvReleaseImage( show ); if( spectol ) cvReleaseImage( spectol ); if( plan ) fftw_destroy_plan( plan ); return true; }
https://w.atwiki.jp/civilization/pages/341.html
MOD/使用方法 MOD/使用方法 [#t4fd3cad] MODをダウンロードしたけど、どうやって使うの? [#k086b6b9] \本体インストール先\Mods\ に専用フォルダを作って入れる [#b61846b6] \My Documents\My Games\Sid Meier's Civilization 4\Mods に専用フォルダを作って入れる [#j78cd51a] \My Documents\My Games\Sid Meier's Civilization 4\CustomAssets に入れる [#n8656377] その他 [#t5a7777b] MODがうまく動かない! [#t9a06757] 名前の表示が正常に表示されずTXT_KEY_hogehogeに化ける。 [#u9a04a3e] アイコンなどが全く表示されない場合 [#i0a9647d] 国別ユニットグラフィック変更方法(BtS) [#f974584f] MODをダウンロードしたけど、どうやって使うの? 次の三種類の方法があります。MODの種類に応じて、またはお好みで選択して下さい。 \本体インストール先\Mods\ に専用フォルダを作って入れる アーカイブ内にiniファイルが含まれているMODは普通この場所に入れます。 ここに入れたMODは次のいずれかの方法でロードします。ただし一回のゲームでは一つのMODしか使用できません。二つ目のMODをロードしようとすると前に読み込んだMODは取り消されます。 メニューから「アドバンス」→「MODをロード」を選んで読み込む 毎回手動でロードしなくてはいけないため面倒ですが、もっとも標準的で安全な方法です。 CivilizationIV.iniの中に mod=Mods\MOD名 と記入する(最初に\をつけない) 起動時に自動でロードされます。なおCivilizationIV.iniは My Documents\My Games\Sid Meier s Civilization 4\ の中にあります。デフォルトでは「Mod = 0」(何もロードしない)という設定になっているので、ファイルをメモ帳などで開いてこの行を探して変更して下さい。 Civilization4.exeにパラメータ -mod=\Mods\MOD名 をつけて起動する(最初に\が必要) 起動時に自動でロードされます。CivilizationIV.iniの中の指定よりも優先されます。 『ABC』というMODをロードさせたい場合。 ①Civ4アイコンを右クリック。 ②プロパティを選択。 ③リンク先の後尾に『(半角スペース)-mod=\Mods\ABC』を追加する。 例:"C \Program Files\CYBERFRONT\Sid Meier s Civilization 4(J)\Beyond the Sword(J)\Civ4BeyondSword.exe" -mod=\Mods\ABC ④そのアイコンを使って起動。 *Civ4へのショートカットアイコンを作ってそれぞれのMODパロメーターを指定すれば各MOD用のアイコンが作れます。 MOD起動用ユーティリティツールを使う ユーティリティに専用のツールがあります。それぞれの使用方法にしたがって使いましょう。 iniファイルを含んでいない(CustomAssetsに入れることを想定している)MODでも、自分でModsフォルダの下に専用フォルダを作って展開してやれば大抵同じ方法でロードできます。この場合iniファイルは自動生成されます。 \My Documents\My Games\Sid Meier s Civilization 4\Mods に専用フォルダを作って入れる 現在のユーザーだけが利用可能となる点を除き、本体の下のModsフォルダに入れた場合と同じ扱いになります。 \My Documents\My Games\Sid Meier s Civilization 4\CustomAssets に入れる 専用フォルダは作らず、アーカイブ内の各ファイルをそれぞれCustomAssetsの下の対応するサブフォルダ(Art、Python、XMLなど)にコピーします。 ここに入れたファイルは何もしなくても全てのシングルプレイにおいて毎回自動で読み込まれます(マルチプレイでは読み込まれません)。複数のMODを入れれば同時に使うことができ、さらにModsフォルダ内のMODをロードした後も引き続き適用されます。 ただしこの結果MOD同士が競合を起こす可能性もあるので注意が必要です。またファイルが散らばるためアンインストールにも手間がかかります。 iniファイルを含んでいる(Modsフォルダに入れることを前提としている)MODでも、該当ファイルを抜き出してここに展開すれば使用可能な場合があります。ですが前述のように競合する可能性があるため、大がかりなMODをCustomAssetsに入れるのはおすすめできません。インタフェース強化などの小さなMODを入れる時に使うとよいでしょう。 その他 MODによってはこれ以外のインストール方法が指示されている場合もあります(たとえば本体のファイルを直接置き換えるなど)。その場合は各MODの説明に従って下さい。 MODがうまく動かない! 名前の表示が正常に表示されずTXT_KEY_hogehogeに化ける。 Windowsのコントロール パネルから地域と言語のオプションを英語に変えてゲームを起動すると正常に表示されます。 アイコンなどが全く表示されない場合 英語版のCiv4は通常\Firaxis Games\Sid Meier s Civilization 4という構成になっていますが、日本語版では\CYBERFRONT\Sid Meier s Civilization 4(J)という構成に変更されています。この為、英語版用のMOD内で参照パスが指定されている場合、インターフェース関連が全く表示されなくなってしまいます。 2chのMODスレ428氏が解決方法をあげてくださっています。 SevoModに限らず、日本語版でその現象が出る多くの理由は configを読み込むMODで、\python\INIParserなどにあるCvPath.pyの レジストリ指定が英語版のものになっているためだと思われます。 レジストリの指定を日本語版に変更すればいいようです。 def _getInstallDir() return __getRegValue(_winreg.HKEY_LOCAL_MACHINE, r"SOFTWARE\CYBERFRONT\Sid Meier s Civilization 4(J)", "INSTALLDIR") Sevomodの場合はそれに加えて、\Assets\res\fontのフォントファイルを変更しないとハンマーなどが化けます。 日本語版のMODを英語版で使うときは、逆に def _getInstallDir() return __getRegValue(_winreg.HKEY_LOCAL_MACHINE, r"SOFTWARE\Firaxis Games\Sid Meier s Civilization 4", "INSTALLDIR") に変え、Assets\res\fontフォルダに英語版用のフォントファイルに変更する。 他に考えられる原因として、パスに2バイト文字が含まれていると(ユーザ名等)、同様の不具合が出ることがあります。 その場合は、ユーザー名の変更やmodを別の場所に入れる等して、パスに2バイト文字が含まれないようにしてください。 XMLファイルのテキスト定義に Japanese を追加してやるとうまくいくケースもあるみたいです。 もっともテキスト定義は数が多くなるので全部追加するのは難しいですが・・・ XMLファイルの例: Civ4GameText xmlns="http //www.firaxis.com" TEXT Tag TXT_KEY_AIAUTOPLAY_CANCEL /Tag English Cancel /English French Cancel /French German Abbrechen /German Italian Cancel /Italian Spanish Cancel /Spanish Japanese Cancel /Japanese !-- この行を追加する -- /TEXT /Civ4GameText 国別ユニットグラフィック変更方法(BtS) 下記例は日本ユニット変更 まずhttp //www.civfanatics.com/等から画像を拾います、 http //stack-style.org/SidGame/?off=75 ここにいっぱいあります 次にその画像ファイルを\Art\Unitsに置きます 次に\XML\Civilizations\CIV4CivilizationInfos.xmlのJAPANを見てみると、 ユニットアートスタイルがASIANになっています、これをJAPANに変更します、 しかしJAPANスタイルなどまだできてないので、次に\XML\Art\CIV4ArtDefines_Unit.xmlを開きます、 新しいユニットを追加していきます、弓兵なら弓兵をコピペして、名前(例ART_DEF_UNIT_ARCHER_JAPAN)と、 関連画像ファイル NIF 、アニメファイル KFM 、?? SHADERNIF の位置指示文字を変えます。 位置は最初に置いたフォルダの位置です、*.kfmが入っていない場合、どのアニメーションファイル(*.kfm)を 使用するか考えて指示しましょう、他のユニットのもの、場所を指示しても問題ありません。 SHADERNIF は NIF と同じ指示でOK。 次に同フォルダCIV4UnitArtStyleTypeInfos.xmlを開き、JAPANスタイルを作ります、例JAPANなら、まずはアジアンスタイルなどをコピペして、必要なユニットだけ、追加、変更すればよいでしょう、で、完了のはずです。
https://w.atwiki.jp/amaeda/pages/56.html
FFTWマニュアル - FFTWリファレンス - ベーシックインターフェース - 複素離散フーリエ変換 複素離散フーリエ変換 fftw_plan fftw_plan_dft_1d( int n, fftw_complex *in, fftw_complex *out, int sign, unsigned flags ); fftw_plan fftw_plan_dft_2d( int nx, int ny, fftw_complex *in, fftw_complex *out, int sign, unsigned flags ); fftw_plan fftw_plan_dft_3d( int nx, int ny, int nz, fftw_complex *in, fftw_complex *out, int sign, unsigned flags ); fftw_plan fftw_plan_dft( int rank, const int *n, fftw_complex *in, fftw_complex *out, int sign, unsigned flags ); 複素数を入出力とする、0次元または多次元の離散フーリエ変換(DFT)をおこない、fftw_planを返り値として返します(4.2章プランの利用参照)。 一たび、特定の型及びパラメータに対しプランを作り、その後同じ型、パラメータに対する異なるプラン(ただし対象とする配列が異なるもの)を生成すれば、プラン生成は高速におこなわれ、最初のプランと同じデータは共有されます(仮に最初のプランがまだ存在すれば)。 プランナーは、プランの生成に失敗すればNULLを返します。 FFTWの設定をカスタマイズして、特定の変換を行うようにしない限りベーシックインターフェースは常にNULLでない値を返します。 引数 rank ランク(rank)は変換の次元(配列*nのサイズであるはずです)であり、任意の非負整数をとりえます。"_1d","_2d","_3d"のプランナーはそれぞれrankが1,2,3に対応します。rankが0は、サイズ1の変換に対応し、これはすなわち1つの数を入力から出力へコピーとなります。 n, nx, ny, nz, n[rank] nまたは、nx,ny,nzもしくは、n[rank]はそれぞれ変換の次元のサイズを与え、任意の非負整数をとりえます。 多次元の配列は列メジャー順で次元が格納されます。すなわちnx x ny、あるいはnx x ny x nz、あるいはn[0] x n[1] x ... n[rank-1]という順です。詳細は3.2章の多次元配列のフォーマット参照。 FFTWは配列サイズがの時に、一番性能が発揮され ます。ただし、e+fは、0か1で他の係数(a,b,c,d)は任意です。他のサイズの時は、一般的なアルゴリズムを用いた遅いアルゴリズムで計算されます(それでも遅くてもO(nlogn)の次元です)。FFTWを違うサイズ用にカスタマイズすることもできるので、必要なら8章のInstallation and Customizationを参照してください。2の階乗のサイズの変換はとりわけ高速に計算できます。 in, out inとoutは変換の入力および出力の配列を表し、同じものを取りえます(in-place変換)。これらの配列は、FFTW_ESTIMATEフラグが使われない限り、プラン生成の際に値が上書きされます。(配列は初期化する必要はないが、確保する必要があります)。 in == outの時には、変換はin-placeとなり、入力配列は上書きされます。in != outであれば、2つの配列はメモリ領域が重なってはいけません(FFTWはこの条件はチェックしません)。 sign signはフーリエ変換を定義するエクスポーネントです。-1(=FFTW_FOWRARD)もしくは+1(FFTW_BACKWARD)の値をとります。 ※変換の方向と考えてよい flags flagはビットごとのORで構成されるゼロ以上のフラグです。24ページの4.3.2章のプランナーフラグで定義されます。 FFTWの演算では規格化がされません。すなわち、逆変換を行った後、正変換(またはその逆)を行うと、計算結果は元のデータを変換のサイズ倍(配列の次元の積)されます。より詳しい情報は、4.7章のWhat FFTW Really Computesを参照してください。
https://w.atwiki.jp/amaeda/pages/59.html
FFTWマニュアル - FFTWリファレンス - ベーシックインターフェース - 実データ離散フーリエ変換配列様式 実データ離散フーリエ変換配列様式 実データの離散フーリエ変換出力(r2c変換)は、対称性を持つ。つまり、原則的には、2倍の冗長性を持つ(4.7節What FFTW Really Computes参照)。(逆c2r変換の入力も、同様)。実際のところ、これらの冗長性の排除を、効果的かつ理解しやすい形式(多次元変換の一般化するもの)で行うことを、完全に実現することは不可能である。その代わりに、r2c変換の出力は、対応する複素変換の出力の半分をわづかに超える。データはいかなる方法でも”圧縮”せず、通常のfftw_complex値の配列として、格納している。実際のところ、このデータは対応する複素変換の配列の一部分である。 具体的にいえば、d(=ランク)次元の n1 x n2 x n3 x ... x nd の実変換では、複素データは、fftw_complex値で、n1 x n2 x n3 x ... x (nd/2 + 1)の行メジャー形式の配列である(割り算の余りは切り捨て)。つまり、我々は通常の複素変換で得られるデータの最後の次元の、小さいほうの半分(非負周波数)、に加えて1要素しか保存していません。(他の次元を半分にすることも可能でしたが、実装が最も簡単だったため、最後の次元を半分にしました)。 入出力が異なる、アウトオブレイス変換では、実データは単なる配列で、物理次元 n1 x n2 x n3 x ... x nd(列メジャー形式)となっています。 入出力が同じである、インプレイス変換では、いくつか複雑な問題が生じます。というのも、複素データは、実データより僅かに大きいためです。このケースでは、実データの最後の次元は、必ず余白がとられている必要があり、そこには追加の余分な値が格納されます。--最後の次元が偶数であれば、2つの追加、奇数であれば1つの追加データです。 つまり、実データの最後の次元は、物理的に 2(nd + 1)個のdouble値である必要があります(複素データを格納するのに過不足ないサイズ)。しかしながら、この物理的配列サイズは、論理的な配列サイズは変更しません。ndの値だけが、実際に最後の次元に格納され、ndがプランナーに渡される最後の次元となります。
https://w.atwiki.jp/hatan/pages/32.html
ファイル共有使用方法 音楽ファイルやPSDなどの画像ファイルになると非常に容量をくうため、うpろだでは制限があり難しいです。 そこでオンラインストレージサービスを使用する、ファイル共有の使用方法を説明します。 Dropboxのインストール 自動で同期したりしてくれる、2GBまで無料で使えるDropboxというオンラインストレージサービスがあるので使ってみます。 これを使用すると自分のPC上にあるかのように操作できまつ。 まず下記のアドレスにアクセスします。 https //www.getdropbox.com/ 共有するソフトを使用した方が便利なので、左下の「DownloadDropbox」のボタンを押してプログラムをダウンロードします。 ダウンロードしたら実行してインストールを開始しましょう。 「I agree」のボタンを押します。 「Install」のボタンを押します。 インストール終了までしばらく待ちませう。 新しいアカウントを作るか確認してくるので、上の「I m new to Dropbox」にチェックして「Next」ボタンを押します。 アカウント情報を入力します。 「Computer Name」はアカウント情報に紐付くのでいじらないほうが吉。 2台のPCで使用したい場合は、別のメールアドレス用意して別々にアカウント作成したほうがいいよ。 「First name(他の人に表示されるのでコテでおk)」、「Email(適当にフリーメールでも作ろう)」、「Password」、「Verify Password(パスワード確認)」だけ入力して「Next」ボタンを押します。 日本語でおkな人は「Skip tour finsh」を押します。 なにもチェックいれないで「Finish and go to My Dropbox」を押します。 マイドキュメントのフォルダが表示されます。 MyDocument\My Dropboxが共有フォルダになるよ。(※共有設定しなければ他の人には見えません) 以上でインストールは完了です。次に共有フォルダの使用方法を説明します。 共有フォルダの使用方法 企画で使用するためにだれかの共有フォルダを使用することになります。 次の手順で共有フォルダを使用できるようにします。 1.アカウント登録で使用したメールアドレスを、その共有フォルダの管理者に教えてあげましょう。 2.共有フォルダの管理者が、そのアカウントで操作できるように共有フォルダの権限設定をします。 (ここの作業は管理者以外する必要ないよ!) 3.設定が終わった頃合いを見計らって下記のアドレスに再び飛びます。 https //www.getdropbox.com/ 4.右上の「Email」と「Password」を入力して、「Sign in」ボタンを押します。 5.おや? メールがきているようです。 右上にメールマークの「Inbox(1)」と表示されているので押してみます。 6.メールの内容の「Accept」というボタンを押します。 これで共有フォルダを使用できるようになりました。 マイドキュメントのDropboxフォルダの中に、新たに共有フォルダが作成されているかと思います。 あとは普通のフォルダのように使ってね! ※使用する際は、別のフォルダにバックアップとっておいたほうがいいよ。 お疲れ様でした!
https://w.atwiki.jp/mmdwiki/pages/11.html
基本的な使用方法は動画で説明されている通りです。
https://w.atwiki.jp/amaeda/pages/45.html
FFTWマニュアル - その他重要なこと - 多次元配列のフォーマット - C言語における動的配列 C言語における動的配列 Dynamic Arrays in C ほとんどの場合に、動的にfftw_mallocを使って、配列を確保することを推奨します。1次元の場合よりも、多次元の方が複雑ではありますが、これは難しいことではありません。 配列の生成は簡単です。fftw_mallocのような動的メモリ確保ルーチンを使って、N個のfftw_complex値(複素数DFTに関しては)の大きさの配列を確保します。ここで、Nは配列の次元の積(すなわち、配列の複素数知の総数)です。以下に、ランク3の5x12x27の配列を確保するコード例を示します。 fftw_complex *an_array; an_array = (fftw_complex*)fftw_malloc( 5*12*27 * sizeof(fftw_complex) ); 配列の要素にアクセスするには、少しテクニックがいります。つまり、固定サイズの配列と同じように"[]"を複数回使えばよいといものではありません。代わりに、明示的に列メジャー配列へ変換するための公式をつかって、オフセットを計算する必要があります。たとえば、上記の方法で確保された、(i,j,k)番目の要素を参照するためには、 an_array[k + 27 * (j + 12*i)] という表現を使えばよいでしょう。 この手間は、適切なマクロを定義するか、もしくはC++言語では、"()"演算子をオーバーロードするクラスを作れば、軽減できます。最近のC99標準は、動的配列を、[]表現が使える”可変長”多次元配列として、解釈する機能がありますが、これはまだコンパイラで広くサポートされるものではありません。
https://w.atwiki.jp/amaeda/pages/29.html
実データ1次元離散フーリエ変換 One-Dimensioanal DFTs of Real Data 実際の利用上、多くの場合、入力データin[i]は実数で、その場合DFTの出力は、”エルミート冗長性”を満たします。すなわち、out[i]はout[n-i]の共役となります。この性質の利点を生かすと、大雑把にいえば、スピードの向上と、メモリ節約を図ることができます。 このスピード向上と、メモリ節約といった利点と引き換えに、ユーザーはFFTWの複素変換の簡易性を犠牲にしなければなりません。 第1に、入出力の配列が異なるサイズ、型になります。入力がn個の実数だった場合、出力は(冗長でない形で)n/2+1個の複素数となります。また、入出力が等しい、in-place変換の場合、入力の配列にわずかに”パディング”(余白)を設ける必要があります。 第2に、複素数から実数への逆変換は、デフォルトで、入力配列が変化してしまうという副作用があります。どちらの不便もユーザーに対して重大な問題は引き起こしませんが、十分意識することが重要です。 この実データ変換のルーチンは、複素変換のものとほとんど同じです。 すなわち、doubleまたは、fftw_complex型の配列のメモリを確保し(fftw_malloc推奨)、fftw_planを作成し、fftw_execute(plan)を必要な回数だけ実行し、fftw_destroy_plan(plan)によって、後処理をします(fftw_freeも)。 違いといえば、入力(または出力)がdouble型で、新しいプラン生成のルーチンがあるだけです。1次元では、 fftw_plan fftw_plan_dft_r2c_1d( int n, double *in, fftw_complex *out, unsigned flags ); fftw_plan fftw_plan_dft_c2r_1d( int n, fftw_complex *in, double *out, unsigned flags ); となります。 それぞれ、実入力から複素エルミート出力(r2c)、複素エルミート入力から実出力(c2r)の変換です。複素離散フーリエ変換プランナーとは異なり、signの引数がありません。代わりに、r2c離散フーリエ変換は、常にFFTW_FORWARDで、c2rはFFTW_BACKWARDとします。(単精度/倍倍精度の、fftwfとfftwlに対しては、doubleをそれぞれfloattとlong doubleに置き換えてください) ここで、nは離散フーリエ変換の”論理”サイズで、必ずしも配列の物理的サイズではありません。詳しくいえば、実数(double)の配列はn個の要素を持ちますが、一方でfftw_complexは、n/2+1個(切り捨て)の要素となります。入出力が同じ、in-place変換では、inとoutが別名の同じ配列で、これは入出力の両者を格納できる大きさである必要があります。したがって、実配列は、実際のところ2*(n/2+1)個の要素を持ち、最初のn個以降は使用されないパディングとなります。 複素配列のk番目の要素は、対応する複素離散フーリエ変換のk番目の要素にきっかり等しくなります。また、すべての正のnがサポートされています。もっとも、小さな素数の積が最も効率がよく、最悪の場合でもO(nlogn)アルゴリズムとなります。 上述の通り、c2r変換は、たとえ入出力が異なるout-of-place変換であっても、入力配列の値は変換前後で保持されません。これに対しては、必要であれば、FFTW_PRESERVE_INPUTオプションを、flagに設けることでこれを防ぐことができますが、残念なことにある程度パフォーマンスが低下します。このオプションは、現在は次の章の実データ多次元の離散フーリエ変換には対応していません。 実データの離散フーリエ変換に慣れている読者なら、複素出力の、0番目(DC)とn/2番目(nが偶数のとき、ナイキスト周波数)の要素は、実数になることを思い出していただけるかと思います。いくつかの実装では、入出力の配列サイズをそろえるため、上記性質を利用し、ナイキスト周波数の要素をDCの虚部に格納することがあります。しかしながら、このような実装は高次の変換に対しては一般性がなく、メモリ節約は枝葉末節であるため、FFTWではサポートしません。 1次元のr2cやc2r離散フーリエ変換の代替インターフェースとして、”r2r”というものがあります(2.5.1節 The Halfcomplex-format DFTを参照)。 これは、入力配列と同じ型、サイズの、"halfcomplex"形式の出力が用いられるものです。このインターフェースは、多次元変換に対しては大変便利というものではありませんが、よりよい性能を発揮することもしばしあります。